package club.pinea.service;

import club.pinea.model.Promoter;
import club.pinea.model.SeatsInfo;
import club.pinea.model.User;
import club.pinea.model.UserInfo;

import java.sql.SQLException;
import java.util.Map;

/**
 * @author pineapple
 * @date 2017年12月21日 下午3:09:48
 * @description 用户操作接口
 */
public interface UserService {

    /**
     * 判断用户是否登录成功
     *
     * @param username 用户名
     * @param password 密码
     * @return 登录成功/失败
     */
    User userLogin(String username, String password);

    /**
     * 修改用户的登录ip地址
     *
     * @param u  根据ID检索
     * @param ip 需要修改的ip地址值
     */
    void updateUserIp(User u, String ip);

    /**
     * 注册用户
     *
     * @param u
     */
    int userRegister(User u);

    /**
     * 查找对应邀请人的邀请码是否存在
     *
     * @param beInvited 用户id，邀请码
     */
    int userCount(String beInvited);

    /**
     * 验证用户名是否存在
     *
     * @param name
     * @return
     */
    boolean verifyName(String name);

    /**
     * 验证管理员账号密码是否正确
     *
     * @return 返回验证结果
     */
    boolean adminValidate();

    /**
     * 更新修改服务器端IP的方法
     *
     * @param status 修改的状态码
     */
    void updateControllerValue(int status);

    /**
     * 查询推广员用户信息
     *
     * @param name
     * @param pass
     * @return
     */
    Promoter promLogin(String name, String pass);

    /**
     * 修改密码
     *
     * @param name
     * @param oldPass
     * @param newPass
     * @return
     */
    int resetPassword(String name, String oldPass, String newPass);

    /**
     * 用户退出登录
     *
     * @param id 根据用户id检索
     */
    void UserLogout(int id, int status);

    /**
     * 根据ID查找用户名
     *
     * @param userId
     * @return
     */
    String getUserName(int userId);

    /**
     * 根据ID查询当前用户余额
     *
     * @param userId
     * @return
     */
    long getMoneyById(int userId);

    /**
     * 检查数据库用户信息，将暂离用户设置状态为离线
     */
    void updateTimeOutUser();

    /**
     * 检查表中是否有超过局数上限的玩家或者座位
     */
    void updateOutBoundsGameTime();

    /**
     * 根据用户Id查找用户剩余留机次数
     *
     * @param userId
     * @return
     */
    int selectStaySeatTimeById(int userId);

    /**
     * 更新金币
     * @param money
     */
    void updateMoney(double money,int userId) throws SQLException ;

//	/**
//	 * 更新数据库中的用户校验id
//	 * @param bytesToInt
//	 * @return
//	 */
//	int updateCheckId(int checkId,int id) throws SQLException ;

    /**
     * 查询座位信息
     * @param roomId
     * @param seatId
     * @return
     */
    SeatsInfo getSeatsInfo(int roomId, int seatId, int payScore) throws SQLException ;

    /**
     * 根据用户id查询用户信息
     * @param userId
     * @return
     */
    UserInfo getUserInfo(int userId) throws SQLException ;

    /**
     * 根据用户id查询用户对象
     * @param userId
     * @return
     */
    User getUserById(int userId) throws SQLException ;

    /**
     * 更新用户的游戏信息
     * @param score
     * @param gameScore
     */
    void updateUserInfo(int score, int gameScore,int id) throws SQLException ;

    /**
     * 更新座位的游戏信息
     * @param score
     * @param gameScore
     * @param seatId
     * @param roomId
     */
    void updateSeatInfo(int score, int gameScore, Integer seatId) throws SQLException ;


    /**
     * 更新用户和座位的信息
     * @param checkId
     * @param id
     * @param b
     * @param roomid
     * @param seatId
     */
    void updateUserAndSeatInfo(int checkId, int id, byte b, int roomid, int seatId,int score,int resetNum);

    /**
     * 更新座位的比倍信息
     * @param score
     * @param gameScore
     * @param seatId
     */
    void updateSeatDoubleScore(int score, int gameScore, int seatId);

    /**
     * 查询座位的游戏记录信息
     * @param seatId
     * @return
     */
    Map<String,Object> selectSeatRecords(int seatId);
//	JSONObject selectSeatRecords(int seatId);

    /**
     * 添加游戏记录
     * @param userId
     * @param seatId
     * @param i
     * @param gameScore
     * @param result
     * @param j
     * @param multiplyPower
     */
    void addRecords(int userId, Integer seatId, int i, int gameScore, int result, int j, int multiplyPower);

    /**
     * 查询用户金币余额
     * @param userId
     * @return
     */
    double getUserMoneyById(int userId);

}
